Модуль:Nutils
--local hasc = require('Dev:Pageinfo') local getArgs = require("Dev:Arguments").getArgs local p = {} function p.hello( frame ) local nt = '' nt = nt .. ' element1 ' return nt --"Hello, world!" end --hello function p.tst (frame) local st = frame:getParent():getTitle() local t = mw.title.new(st) local content = t:getContent() return mw.ustring.sub(content, 1, 100) end --tst function p.tst2 (frame) local arg1 = frame.args1 local ns = '' local ns1 = '' --ns = '[.. args[1 .. ']]' ns = arg1 --ns = frame:newParserValue(ns):expand() --ns = frame:preprocess(ns) for i = 1, mw.ustring.len(ns) do ns1 = ns1..'_'..mw.ustring.sub(ns, i, i) end ns = ns .. ns1 return ns end --tst2 function p.ifex (frame) --returns: or page or category:name or pa1 --name/1: pagename, nocat: skip category local args = frame.args local name = args'name' or args'1' or args1 or '' local nocat = tonumber(args'nocat' or 0) --parent args local parent = frame:getParent() or frame local pargs = parent.args local pa1, pa2, pa3 = pargs'1' or pargs1 or , pargs'2' or pargs2 or '', pargs'3' or pargs3 or '' --true and false deprecated is --local istrue = args't' or args'2' or args2 or '' --local ret = args'f' or args'3' or args3 or '' --false local ret = ' |1=' .. pa1 .. '}}| |' .. pa1 .. '}}' local ns = args'ns' or '' --namespace and namespaced name --params local p1, p2, p3 = args'p1' or '', args'p2' or '', args'p3' or '' --local ret = isfalse if nocat 1 then ret = pa1 end if name ~= '' then --capitalize name name = mw.ustring.upper(mw.ustring.sub(name, 1, 1)) .. mw.ustring.sub(name, 2) --normalize name = mw.ustring.gsub(name, '_', ' ') if ns ~= '' then ns = mw.ustring.upper(mw.ustring.sub(ns, 1, 1)) .. mw.ustring.sub(ns, 2) .. ':' .. name end local data = mw.loadData('module:Nbigbigdatabig') for i, v in ipairs(data) do --v is never ''. otherwise data corrupted are if (v ns) then --template --ret = }| }| }}} ret = ' ' break end if (v name) then --page --ret = ' }}}| }|2}} }|3}}' ret = '1=' .. pa1 .. '}}| ' break end end end return frame:preprocess(ret) end --ifex function p.th (frame) --transclude header --according to template:th --excepts 1st param (t) -> params shifted local args = getArgs(frame) local ns, ncontent, npattern = '' local ncount = tonumber(args'c' or args3 or 0) local ntitle = args'd' or args1 --ncount = tonumber(ncount) --if type(args't') ~= 'nil' then ns=args't' elseif type(args1) ~= 'nil' then ns=args1 end if ((args'bylink' or args5 or '1') '0') then ncontent = (ntitle) else ncontent = frame:expandTemplate{ title=':' .. ntitle } end npattern = (args'h' or args2 or 'Описание') if ncount 0 then npattern = '=+' .. npattern .. '=+(.-) ' else npattern = '=+' .. npattern .. '.-%.-=*(' .. mw.ustring.rep('%w%s,:;%-%+%<%>+%<%>%.%?%!%C+', ncount) .. ')' end ncontent = mw.ustring.match(ncontent, npattern) if type(ncontent) 'nil' then ns = ns .. 'Категория:th - Ошибка поиска' .. (args'def' or args4 or '') else ns = ns .. mw.ustring.gsub(ncontent, '<^>*>', '') end ns = frame:preprocess(ns) return ns end --th function p.th2 (frame) --faster (x5-x7), but uses expensive parser function (title*) --transclude header --according to template:th --excepts 1st param (t) -> params shifted local args = getArgs(frame) local ns, ncontent, npattern = '', '' local ncount = tonumber(args'c' or args3 or 0) local ntitle --ncount = tonumber(ncount) --if type(args't') ~= 'nil' then ns=args't' elseif type(args1) ~= 'nil' then ns=args1 end if ((args'bylink' or args5 or '1') '0') then ncontent = (args'd' or args1) else ntitle = mw.title.new(args'd' or args1) if type(ntitle) ~= 'nil' then ncontent = ntitle:getContent() else ncontent = frame:expandTemplate{ title=':' .. (args'd' or args1) } end end npattern = (args'h' or args2 or 'Описание') if ncount 0 then npattern = '=+' .. npattern .. '=+(.-) ' else npattern = '=+' .. npattern .. '.-%.-=*(' .. mw.ustring.rep('%w%s,:;%-%+%<%>+%<%>%.%?%!%C+', ncount) .. ')' end ncontent = mw.ustring.match(ncontent, npattern) if type(ncontent) 'nil' then ns = ns .. 'Категория:th - Ошибка поиска' .. (args'def' or args4 or '') else ns = ns .. mw.ustring.gsub(ncontent, '<^>*>', '') end ns = frame:preprocess(ns) --ns=mw.ustring.gsub(ns, '%z', '') --remove zero-char's return ns --frame:preprocess(ns) end --th2 function p.th3 (frame) --tst local args = getArgs(frame) local ns, ncontent, npattern = '', '' local ncount = tonumber(args'c' or args3 or 0) local ntitle --ncount = tonumber(ncount) --if type(args't') ~= 'nil' then ns=args't' elseif type(args1) ~= 'nil' then ns=args1 end if ((args'bylink' or args5 or '1') '0') then ncontent=(args'd' or args1) else ntitle=mw.title.new(args'd' or args1) if type(ntitle) ~= 'nil' then ncontent = ntitle:getContent() else ncontent = frame:expandTemplate{ title=':' .. (args'd' or args1) } end end npattern = (args'h' or args2 or 'Описание') if ncount 0 then npattern = '=+' .. npattern .. '=+(.-) ' else npattern = '=+' .. npattern .. '=+' .. '(' .. mw.ustring.rep('.-%.%?%!+%s+', ncount) .. ')=$*' end ncontent = mw.ustring.match(ncontent, npattern) if type(ncontent) 'nil' then ns = ns .. 'Категория:th - Ошибка поиска' .. (args'def' or args4 or '') else ns = ns .. mw.ustring.gsub(ncontent, '<^>*>', '') end ns = frame:preprocess(ns) --ns=mw.ustring.gsub(ns, '%z', '') --remove zero-char's return ns --frame:preprocess(ns) end --th3 function p.setcat (frame) --set category by content --1: page; 2,3: text; 4: cat if found; 5: cat if not found local args = getArgs(frame) local t1, t2 = args2, args3 local nh = '' local ptitle = mw.title.new(args1) local pcontent = mw.getCurrentFrame():preprocess(' ') --nh=mw.ustring.len(pcontent) if type(args3) 'nil' then t2 = t1 end if mw.ustring.find(pcontent, t2, 1, true) or mw.ustring.find(pcontent, t3, 1, true) then nh = args4 else nh = args5 end --nh=(ptitle.prefixedText or 'nil') --nh=#pcontent --nh = hasc.hascat(frame) --nh = select('#', args) return nh--..','..args1..','..(args2 or 'nil')..','..(args3 or 'nil')..','..(args4 or 'nil') end --setcat function p.cats (frame) --has category local hasc = require('Dev:Pageinfo') local args = getArgs(frame) local nh nh = hasc.hascat(frame) --nh = select('#', args) return args1..','..(nh or 'nil') end --cats function p.tlm (frame) --template:tlocmission local args = frame.args local tfull = args1 or 'В этом разделе указаны задания, связанные с данной локацией. В разделе "Выдаются" указаны задания, которые берут начало в этой локации; а в разделе "Выполняются" находятся задания, для которых данная локация служит промежуточной или конечной.' local tin = args2 or 'В этом разделе указаны задания, которые берут начало в этой локации.' local tout = args3 or 'В этом разделе указаны задания, для которых данная локация служит промежуточной или конечной.' local nret = args4 or tfull --default local ntitle = mw.title.new(args'p') local ncontent = ntitle:getContent() local npattern = ' Задания .-' local findresult1, findresult2 = nil, nil findresult1 = mw.ustring.find(ncontent, npattern..'\n%*Выдаются', 1, false) findresult2 = mw.ustring.find(ncontent, npattern..'\n%*Выполняются', 1, false) if (findresult1 and findresult2) then nret = tfull elseif findresult1 then nret = tin elseif findresult2 then nret = tout end return nret end function p.dexname (frame) --return ext name local src = frame.args1 or frame.args'src' or '' local ext = nil if src '' then return end if mw.ustring.find(src, '\'\"\`UNIQ.-\-(.-)\-.-QINU\`\"\, 1, false) then ext = mw.ustring.gsub(mw.ustring.gsub(src, '\'\"\`UNIQ.-\-(.-)\-.-QINU\`\"\'', '%1'),'^(%s%c*)(.-)(%c%s*)$','%2') end return ext end --dexname function p.bit (p) return 2 ^ (p - 1) -- 1-based indexing end -- Typical call: if hasbit(x, bit(3)) then ... function p.hasbit (x, p) return x % (p + p) >= p end function p.setbit (x, p) return hasbit(x, p) and x or x + p end function p.clearbit (x, p) return hasbit(x, p) and x - p or x end return p --